<?php
namespace Mouta\UserBundle\Controller;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\DependencyInjection\ContainerAware;
use Symfony\Component\Security\Core\SecurityContext;
use Mouta\AmistateBundle\utils\SfSolr;
use Mouta\AmistateBundle\Entity\Usuario;
use Mouta\AmistateBundle\Entity\ImagenUsuario;
use FOS\UserBundle\Controller\SecurityController as BaseSecurityController;

class SecurityController extends BaseSecurityController
{
    private function hidrateUsers($querySexo){
        $result = SfSolr::getQuery($querySexo);
        $usuarios = array();
        foreach($result['response']['docs'] as $u){
            $usuario = new Usuario();
            $usuario->setId($u['id']);
            $usuario->setNombre($u['nombre']);
            $usuario->setPara($u['para']);
            $usuario->setCumple( new \DateTime($u['cumple']));
            $usuario->setDescripcion( $u['descripcion']);
            $usuario->setPais( $u['pais']);
            $usuario->setProvincia( $u['provincia']);
            $usuario->setPuntos( $u['puntos']);
            $usuario->setVotos( $u['votos']);
            if($u['sexo'])
                $usuario->setSexo(1);
            else
                $usuario->setSexo(0);
            if($u['fotodefault']){
                $imagen = new ImagenUsuario();
                $imagen->setImagenBig($u['fotodefault']);
                $imagen->setImagen('t-'.$u['fotodefault']);
                $imagen->setDefa(1);
                $imagen->setUsuario($usuario);

                $usuario->addImagenUsuario($imagen);
            }
            $usuarios[] = $usuario;
        }
        return $usuarios;
    }
    
    public function loginAction()
    {
        $querySexo = '?q='.urlencode('sexo:false').'&sort='.urlencode('tienefoto desc, puntos desc') . "&start=0&rows=20";
        $usuariosTmp1 = $this->hidrateUsers($querySexo);
        $querySexo = '?q='.urlencode('sexo:true').'&sort='.urlencode('tienefoto desc, puntos desc') . "&start=0&rows=20";
        $usuariosTmp2 = $this->hidrateUsers($querySexo);
        for($i=0;$i<20;$i++){
            if(isset($usuariosTmp1[$i]))
                $usuarios[] = $usuariosTmp1[$i];
            if(isset($usuariosTmp2[$i]))
                $usuarios[] = $usuariosTmp2[$i];
        }
        
            
        if($this->container->get('security.context')->isGranted('ROLE_USER'))
            return new RedirectResponse($this->container->get('router')->generate('edit_perfil'));
        
        $request = $this->container->get('request');
        /* @var $request \Symfony\Component\HttpFoundation\Request */
        $session = $request->getSession();
        /* @var $session \Symfony\Component\HttpFoundation\Session */

        // get the error if any (works with forward and redirect -- see below)
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } elseif (null !== $session && $session->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = '';
        }

        if ($error) {
            // TODO: this is a potential security risk (see http://trac.symfony-project.org/ticket/9523)
            $error = $error->getMessage();
        }
        // last username entered by the user
        $lastUsername = (null === $session) ? '' : $session->get(SecurityContext::LAST_USERNAME);

        $csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate');

        return $this->container->get('templating')->renderResponse('FOSUserBundle:Security:login.html.'.$this->container->getParameter('fos_user.template.engine'), array(
            'last_username' => $lastUsername,
            'error'         => $error,
            'usuarios' => $usuarios,
            'csrf_token' => $csrfToken,
        ));
    }

}
